/**
 * 密码校验 支持特殊符号/大小写
 * @param rule
 * @param value
 * @param callback
 * @returns {Promise<never>|Promise<void>}
 */
export const validatePassword = (rule, value, callback) => {
    if (value && !/^[A-Za-z0-9]+$/.test(value)) {
        return callback(new Error('密码格式错误,仅支持英文和数字'))
    } else if (value.length < 6) {
        return callback(new Error(''))
    } else {
        return callback()
    }
}

/**
 * 数字校验 + 小数
 * @param rule
 * @param value
 * @param callback
 * @returns {Promise<never>|Promise<void>}
 */
export const validateNumber = (rule, value, callback) => {
    if (value && !/^\d+$/.test(value)) {
        return callback(new Error('仅支持数字!'))
    } else {
        return callback()
    }
}


/**
 * 整数或者保留两位小数校验
 * @param rule
 * @param value
 * @param callback
 * @returns {Promise<never>|Promise<void>}
 */
export const validateTwoDecimalPlaces = (rule, value, callback) => {
    if (value && !/^-?\d+(?:\.\d{1,2})?$/.test(value)) {
        return callback(new Error('仅支持整数或者保留两位小数'))
    } else {
        return callback()
    }
}

/**
 * 验证码校验
 * @param rule
 * @param value
 * @param callback
 * @returns {Promise<never>|Promise<void>}
 */
export const validateNumEng = (rule, value, callback) => {
    if (value && !/^[A-Za-z0-9]+$/.test(value)) {
        return callback(new Error('仅支持英文和数字'))
    } else if (value.length !== 4) {
        return callback(new Error('请输入4位验证码!'))
    } else {
        return callback()
    }
}

/**
 * 电子邮箱校验
 * @param rule
 * @param value
 * @param callback
 * @returns {Promise<never>|Promise<void>}
 */
export const validateEmail = (rule, value, callback) => {
    if (value && !/^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(value)) {
        return callback(new Error('invalid'))
    } else {
        return callback()
    }
}

/**
 * 手机号校验 必填
 * @param rule
 * @param value
 * @param callback
 * @returns {Promise<never>|Promise<void>}
 */
export const validatePhoneRequired = (rule, value, callback) => {
    if ( !value) {
        return callback(new Error('该项为必填！'))
    } else if ( !/^1[356789]\d{9}$/.test(value)) {
        return callback(new Error('电话号码格式错误'))
    } else if (String(value).length !== 11) {
        return callback(new Error('联系方式必须为11位！'))
    } else {
        callback()
    }
}
/**
 * 手机号校验 选填
 * @param rule
 * @param value
 * @param callback
 * @returns {Promise<never>|Promise<void>}
 */
export const validatePhone = (rule, value, callback) => {
    if (value && !/^1[356789]\d{9}$/.test(value)) {
        return callback(new Error('电话号码格式错误'))
    } else if (String(value).length !== 11) {
        return callback(new Error('联系方式必须为11位！'))
    } else {
        callback()
    }
}

/**
 * 字数校验 20个字
 * @param rule
 * @param value
 * @param callback
 * @returns {Promise<never>|Promise<void>}
 */
export const validate20Words = (rule, value, callback) => {
    if (value && String(value).length > 20) {
        return callback(new Error('不能超过20字！'))
    } else {
        callback()
    }
}

/**
 * 字数校验 20个字
 * @param rule
 * @param value
 * @param callback
 * @returns {Promise<never>|Promise<void>}
 */
export const validate20WordsRequired = (rule, value, callback) => {
    if ( !value) {
        return callback(new Error('该项为必填！'))
    } else if (String(value).length > 20) {
        return callback(new Error('不能超过20字！'))
    } else {
        callback()
    }
}

/**
 * 字数校验 50个字
 * @param rule
 * @param value
 * @param callback
 * @returns {Promise<never>|Promise<void>}
 */
export const validate50WordsRequired = (rule, value, callback) => {
    if ( !value) {
        return callback(new Error('该项为必填！'))
    } else if (value && String(value).length > 50) {
        return callback(new Error('不能超过50字！'))
    } else {
        callback()
    }
}

/**
 * 字数校验 非必填，但限制50个字
 * @param rule
 * @param value
 * @param callback
 * @returns {Promise<never>|Promise<void>}
 */
export const validate50Words = (rule, value, callback) => {
    if (value && String(value).length > 50) {
        return callback(new Error('不能超过50字！'))
    } else {
        callback()
    }
}

/**
 * 字数校验 非必填，但限制200个字
 * @param rule
 * @param value
 * @param callback
 * @returns {Promise<never>|Promise<void>}
 */
export const validate200Words = (rule, value, callback) => {
    if (value && String(value).length > 200) {
        return callback(new Error('不能超过200字！'))
    } else {
        callback()
    }
}
